package baduga.core;

/**
 * Klasa zawierają kontrakt komunikacji w systemie JSON
 * 
 * @author Janek
 *
 */
public final class Core_JsonDataSchema {
	
	/** Identyfikator kodu | Informacja o typie danych */
	public int kod = -1; 
	/** argumenty dla typu */
	public int[] args = null; 
	
	/** Dane różnego rodzaju*/
	public Object[] dataD1 = null;
	
	public Object[][] dataD2 = null;
	
	/** Konstruktor */
	public Core_JsonDataSchema() {};
	
	
	/** Konstruktor inicjalizacujący */
	public Core_JsonDataSchema(int nKod, int[] nArgs, Object[] nDataD1, Object[][] nDataD2) 
	{
		kod 	= nKod;
		args 	= nArgs;
		dataD1 = nDataD1;
		dataD2 = nDataD2;
	};

	
	
	
	/**
	 * JSON konwertuje domyślnie na Double.., a my na int
	 * 
	 * @param obj
	 * @return
	 */
	public static int  toInt(Object obj)
	{
		return ((Double) obj).intValue();
	}
	
	
	
	/**
	 * JSON konwertuje domyślnie na Double..., a my na int -> str
	 * 
	 * @param obj
	 * @return
	 */
	public static String  toIntStr(Object obj)
	{
		return ((Integer) ((Double) obj).intValue()).toString();
	}
	
	
	/**
	 * JSON konwertuje domyślnie na Double... a my chcemy Integera
	 * 
	 * @param obj
	 * @return
	 */
	public static Integer[] toInAr(Object[] obj)
	{
		//Def.
		Integer out[];
		
		//Init
		out = new Integer[ obj.length ];
		
		for(int i = 0; i < obj.length; i++)
		{
			out[i] = toInt(obj[i]);
		}
		
		return out;
	}
	
	
	
	
	/**
	 * Konserwsja Tablicy Object[] na String[]
	 * 
	 * @param obj
	 * @return
	 */
	public static String[] toStrAr(Object[] obj)
	{
		//Def.
		String out[];
		
		//Init
		out = new String[ obj.length ];
		
		for(int i = 0; i < obj.length; i++)
		{
			out[i] = (String) obj[i];
		}
		
		return out;
	}

	
	
	//------------------ [getters] - #START ------------------
	
	
	/**
	 * Pobiera lod obsługi
	 * 
	 * @return the kod
	 */
	public int getKod() {
		return kod;
	}


	/**
	 * Pobiera argumenty dla kodu obsługi
	 * 
	 * @return the args
	 */
	public int[] getArgs() {
		return args;
	}

	
	
	
	/**
	 * Pobierane dane D1
	 * 
	 * @return the data
	 */
	public Object[] getDataD1() {
		return dataD1;
	}

	/**
	 * Pobierane dane D2
	 * 
	 * @return the data
	 */
	public Object[][] getDataD2() {
		return dataD2;
	}

	
	//------------------ [getters] - #END ------------------
	
	
	
	//------------------ [setters] - #START ------------------
	
	/**
	 * Ustawia kod obsługi
	 * 
	 * @param kod the kod to set
	 */
	public void setKod(final int kod) {
		this.kod = kod;
	}


	/**
	 * Ustawia argumenty dla kodu obsługi
	 * 
	 * @param args the args to set
	 */
	public void setArgs(final int[] nArgs) {
		this.args = nArgs.clone();
	}


	/**
	 * Ustawia dane
	 * 
	 * @param data the data to set D1
	 */
	public void setDataD1(final Object[] dataD1) {
		this.dataD1 = dataD1.clone();
	};
	
	
	/**
	 * Ustawia dane
	 * 
	 * @param data the data to set D1
	 */
	public void setDataD2(final Object[][] dataD2) {
		this.dataD2 = dataD2.clone();
	};
	
	//------------------ [setters] - #START ------------------
	
	
	
	

}
